﻿/*
* Date：2023/5/24
* Subject：添加方法（根据id查询一条数据）
* **/
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Max.PH5_2011A.IService
{
    public interface IBaseService<T> where T : class,new()
    {
        /// <summary>
        /// 添加数据
        /// </summary>
        /// <param name="t"></param>
        /// <returns></returns>
        int Insert(T t);

        /// <summary>
        /// 修改数据
        /// </summary>
        /// <param name="t"></param>
        /// <returns></returns>
        int Update(T t);

        /// <summary>
        /// 删除数据
        /// </summary>
        /// <param name="t"></param>
        /// <returns></returns>
        int Delete(T t);

        /// <summary>
        /// 查询数据
        /// </summary>
        /// <returns></returns>
        IQueryable<T> Query();

        /// <summary>
        /// 查询一条数据
        /// </summary>
        /// <param name="id"></param>
        /// <returns></returns>
        T QueryFirst(string id);

        //由于分页需要返回符合条件的总记录数，所以这个IQueryable
        //1、可以用dto替代
        //2、也可用匿名类
        //3、也可以定义一个类（里面包含总条数）
        //4、返回两个数据：一个结果数据集，一个总条数
        //5、元祖Tuple<,,,,,> ,尖括号中最多是8个数据类型，可以嵌套
        //6、out ---- ref
        //IQueryable<T> Query(int pageIndex,int pageSize);
        //(IQueryable<T>,int) Query(int pageIndex, int pageSize);
        //Tuple<IQueryable<T>, int> Query(int pageIndex, int pageSize);
        IQueryable<T> Query(int pageIndex, int pageSize,out int total);
        IQueryable<T> Query(System.Linq.Expressions.Expression<Func<T, bool>> where, 
            int pageIndex, int pageSize, out int total);

        IQueryable<T> Query<TKey>(System.Linq.Expressions.Expression<Func<T, bool>> where,
            System.Linq.Expressions.Expression<Func<T,TKey>> sort,bool isAsc,
            int pageIndex, int pageSize, out int total);
    }
}
